package com.pdweb.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.pdweb.vo.TipoUsuario;

public class TipoUsuarioDao extends DBconnection{
	
	private Connection conn;

	public TipoUsuarioDao() throws ClassNotFoundException, SQLException {
		this.conn = getConnection();
	}

	public TipoUsuarioDao(Connection conn) {
		this.conn = conn;
	}

	public void adicionaUsuario(TipoUsuario TipoUsuario) throws SQLException {

		PreparedStatement st = null;

		try {
			st = conn
					.prepareStatement("insert into TipoUsuario(ID_TIPO_USUARIO_TUSR, ST_NOME_TUSR) value(?,?);");

			st.setInt(1, TipoUsuario.getIdTipoUsuario());
			st.setString(2, TipoUsuario.getNomeTipoUsuario());
			
			
			st.execute();
		} finally {
			st.close();
		}
	}

	public List<TipoUsuario> obterTipoUsuario() throws SQLException {

		List<TipoUsuario> tipoUsuario = new ArrayList<TipoUsuario>();

		Statement st = null;
		ResultSet rs = null;

		try {
			st = conn.createStatement();
			rs = st.executeQuery("select * from TIPO_USUARIO" );
			while (rs.next()) {
				TipoUsuario result = new TipoUsuario();
				
				result.setIdTipoUsuario(rs.getInt("ID_TIPO_USUARIO_TUSR"));
				result.setNomeTipoUsuario(rs.getString("ST_NOME_TUSR"));
				
				tipoUsuario.add(result);
			}
		} finally {
			st.close();
			rs.close();
		}
		return tipoUsuario;
	}

	public void excluirUsuario(TipoUsuario tipoUsuario) throws SQLException {

		PreparedStatement st = null;

		try {
			st = conn
					.prepareStatement("delete from TipoUsuario where ID_TIPO_USUARIO_TUSR = ?;");

			st.setInt(1, tipoUsuario.getIdTipoUsuario());
			st.execute();
		} finally {
			st.close();
		}
	}

	public TipoUsuario obterUsuario(TipoUsuario tipoUsuario) throws SQLException {
		TipoUsuario retorno = null;
		Statement st = null;
		ResultSet rs = null;

		try {
			st = conn.createStatement();
			
			String sql = "select * from TipoUsuario where ID_TIPO_USUARIO_TUSR = "
					+ tipoUsuario.getIdTipoUsuario();

			rs = st.executeQuery(sql);

			if (rs.next()) {
				retorno = new TipoUsuario();

				retorno.setIdTipoUsuario(rs.getInt("ID_TIPO_USUARIO_TUSR"));
				retorno.setNomeTipoUsuario(rs.getString("ST_NOME_TUSR"));
				
			}
			return retorno;
		} finally {
			st.close();
			rs.close();
		}
	}
	
	public void atualizaUsuario(TipoUsuario TipoUsuario) throws SQLException{
		
		PreparedStatement st = null;
		try {
			st = conn
					.prepareStatement("UPDATE TipoUsuario SET ID_TIPO_USUARIO_TUSR = ?, ST_NOME_TUSR = ? WHERE ID_DIVISAO_DIV = ?;");
			
			st.setInt(1, TipoUsuario.getIdTipoUsuario());
			st.setString(2, TipoUsuario.getNomeTipoUsuario());;
			st.setInt(3, TipoUsuario.getIdTipoUsuario());
			
			st.execute();
		} finally {
			st.close();

		}
	}
	
	public List<TipoUsuario> consultaTipoUsuario(String sql) throws SQLException {

		List<TipoUsuario> tipoUsuario = new ArrayList<TipoUsuario>();

		Statement st = null;
		ResultSet rs = null;

		try {
			st = conn.createStatement();
			rs = st.executeQuery(sql);
			while (rs.next()) {
				TipoUsuario result = new TipoUsuario();
				
				result.setIdTipoUsuario(rs.getInt("ID_TIPO_USUARIO_TUSR"));
				result.setNomeTipoUsuario(rs.getString("ST_NOME_TUSR"));

				tipoUsuario.add(result);
			}
		} finally {
			st.close();
			rs.close();
		}
		return tipoUsuario;
	}

}
